package functional.higherorderfunction;

/**
 * @ClassName ProduceFunction
 * @PackageName functional.higherOrderFunction
 * @projectName myThread
 * @Description 
 * @Author games
 * @Date 2025/8/26 下午2:21
 * @Version 1.0
 */

import java.util.function.*;


/**
 * 函数式接口FuncSS，继承自Function<String, String>
 * 用于定义接收字符串参数并返回字符串结果的函数
 */
interface FuncSS extends Function<String, String> {
} // [1]

/**
 * 函数工厂类，用于生产特定的字符串处理函数
 */
public class ProduceFunction {


    /**
     * 这里，produce() 是高阶函数。
     *
     * [1] 使用继承，可以轻松地为专用接口创建别名。
     *
     * [2] 使用 Lambda 表达式，可以轻松地在方法中创建和返回一个函数。
     *
     * @return
     */
    /**
     * 生产一个字符串处理函数
     * 该函数将输入的字符串转换为小写形式
     *
     * @return FuncSS 返回一个将字符串转为小写的函数实例
     */
    static FuncSS produce() {
        return s -> s.toLowerCase(); // [2]
    }

    /**
     * 程序入口点，演示函数生产器的使用
     *
     * @param args 命令行参数数组
     */
    public static void main(String[] args) {
        // 获取字符串转小写函数实例
        FuncSS f = produce();
        // 应用函数将"HELLO"转换为小写并输出
        System.out.println(f.apply("HELLO"));
    }
}
